package cn.jiangjiesheng.bootstrap.xxl.job;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;

import java.io.Serializable;

/**
 * Created by dev@jiangjiesheng.cn on 2021/9/27  <br/>
 *
 * @author dev@jiangjiesheng.cn
 */
@ConditionalOnMissingBean(XxlJobProperties.class)
@ConfigurationProperties(prefix = XxlJobProperties.PREFIX)
@RefreshScope
@Data
@Configuration
@NoArgsConstructor
public class XxlJobProperties implements Serializable {

    public static final String PREFIX = "xxl.job";
    /**
     * 开启自动装配
     */
    private boolean enabled;
    /**
     * xxl-job-admin serverAdd.
     * http://127.0.0.1:8080/xxl-job-admin
     */
    private String adminAddresses;

    /**
     * xxl-job accessToken
     */
    private String accessToken;

    private Executor executor;

    @Data
    @NoArgsConstructor
    public static class Executor implements Serializable {
        /**
         * 执行器AppName[选填]:执行器心跳注册分组依据,为空则关闭自动注册(xxl-job executor app name)
         */
        private String appname;

        /**
         * 执行器注册[选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 IP:PORT 作为注册地址
         * 从而更灵活的支持容器类型执行器动态IP和动态映射端口问题
         */
        private String address;

        /**
         * 执行器IP[选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用.
         * 地址信息用于'执行器注册'和'调度中心请求并触发任务'.
         */
        private String ip;

        /**
         * 执行器端口号[选填]:小于等于0则自动获取,默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口.
         */
        private int port;

        /**
         * 执行器运行日志文件存储磁盘路径[选填]:需要对该路径拥有读写权限,为空则使用默认路径.
         */
        private String logpath;

        /**
         * 执行器日志文件保存天数[选填],过期日志自动清理,限制值大于等于3时生效;否则,如-1,关闭自动清理功能.
         */
        private int logretentiondays = 7;
    }

}
